//导入两个接口: 登陆接口 登陆成功后获取用户信息的接口
import { login,getUserInfo } from '@/api/login.js'

//导入操作token的方法
import { getToken,setToken } from '@/utils/tool.js'
import { Message } from 'element-ui';

//我们为什么要使用vuex?  用户的登录操作通过vuex来执行    存储什么?  用户登录成功之后, 把用户的权限信息,个人信息保存到vuex中,

const state = {
    //token是什么时候存储到cookie中的?  在登录成功之后
    token:getToken(),   //token: 令牌的意思, 也就是前台给后台传递接口时,后台校验前台是否有token,并且token是否合法, 如果合法则可以请求后台,如果不合法则后台拒绝请求
    access:'' //把当前用户的权限信息存储到vuex中的access变量中,  权限信息: 不同用户显示不同导航菜单, 按钮的使用权限, 访问后台API的权限
};

const mutations = {
    //修改state和cookie中的token
    SET_TOKEN(state,token){
        //TODO:1. 修改vuex中state的token
        state.token = token;
        //TODO:2. 把token存储到cookie中.
        setToken(token);
    },
    //修改state中的权限信息
    SET_ACCESS(state,access){
        state.access = access;
    },
    //登出(退出)
    UN_SET_TOKEN(state,data){
        state.token = data;
        state.access = data;
        setToken("");
    }
};

const actions = { //向外暴露接口   在actions中写的方法需要在vue组件中使用  ...mapAction(['',''])  this.$store.dispatch("")
    //执行登录
    handleLogin({commit},{username,password}){ //第二个参数就是登陆的参数 username, password
        //异步接口
        return new Promise((resolve,reject)=>{
            login({username,password}).then(res=>{
                if(res.data.code == 10000){ //后台处理接口请求后, 登陆成功 然后给前台返回 { code:10000,status:true,message:'登陆成功',data:token的值 }
                    let token = res.data.data;
                    commit('SET_TOKEN',token);
                    resolve();
                }else{//如果登录失败 { code:10001,status:false,message:'登录失败' }
                    //alert(res.data.message);
                    //Message.warning({message:res.data.message,center:true});
                    return false;
                }
            }).catch(err=>{
                reject(err);
            });
        });
    },
    //获取用户信息
    getUserInfo({state,commit}){
        return new Promise((resolve,reject)=>{
            try{
                getUserInfo().then(res=>{ // {code:10000,message:'请求成功',status:true,data:用户的权限信息}
                    const access = res.data.data;

                    commit('SET_ACCESS',access);
                    resolve(access);
                });
            }catch(error){
                reject(error);
            }
        });
    },
    //退出
    logout({commit}){
        commit('UN_SET_TOKEN',"");
    }
};

export default {
    state,
    mutations,
    actions
}
